// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor*;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <string>
#include <list>
#include "../SQLStatementImpl.h"
#include "../SQLReplaceable.h"
#include "SQLDropStatement.h"

class SQLName;
class SQLExprTableSource;
class SQLExpr;
class DbType;
class SQLASTVisitor;
class SQLObject;
class SQLDDLStatement;

class SQLDropIndexStatement 
:virtual public SQLStatementImpl ,
 virtual public SQLDropStatement,
 virtual public SQLReplaceable {
    public:
    SQLName_ptr  indexName;
    SQLExprTableSource_ptr  tableName;

    SQLExpr_ptr algorithm;
    SQLExpr_ptr lockOption;
    BOOL_ptr ifExists;

    SQLDropIndexStatement() ;

    SQLDropIndexStatement(DbType_ptr   dbType) ;
  SHAREDOBJECT(SQLDropIndexStatement);

    SQLName_ptr  getIndexName() ;

    void setIndexName(SQLName_ptr  indexName) ;

    SQLExprTableSource_ptr  getTableName() ;

    void setTableName(SQLName_ptr  tableName) ;

    void setTableName(SQLExprTableSource_ptr  tableName) ;

    SQLExpr_ptr getAlgorithm() ;

    void setAlgorithm(SQLExpr_ptr x) ;

    SQLExpr_ptr getLockOption() ;

    void setLockOption(SQLExpr_ptr x) ;

    
    void accept0(SQLASTVisitor_ptr visitor) ;

    
    SQLObject_list_ptr  getChildren() ;

    BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target) ;

    BOOL_ptr isIfExists();

    void setIfExists(BOOL_ptr ifExists) ;

    
    SQLDDLStatement::DDLObjectType getDDLObjectType() ;
};
